home *** CD-ROM | disk | FTP | other *** search
/ Aminet 1 (Walnut Creek) / Aminet - June 1993 [Walnut Creek].iso / usenet / sources / volume2 / kernel / xoper12.2 < prev   
Internet Message Format  |  1988-10-29  |  56KB

  1. Path: xanth!nic.MR.NET!tank!ncar!mailrus!ulowell!page
  2. From: page@swan.ulowell.edu (Bob Page)
  3. Newsgroups: comp.sources.amiga
  4. Subject: v02i036:  xoper - system operations info and control V1.2, Part02/02
  5. Message-ID: <9919@swan.ulowell.edu>
  6. Date: 29 Oct 88 00:13:46 GMT
  7. Organization: University of Lowell, Computer Science Dept.
  8. Lines: 2028
  9. Approved: page@swan.ulowell.edu
  10.  
  11. Submitted-by: g35@dhdurz1.bitnet (Guenther Werner)
  12. Posting-number: Volume 2, Issue 36
  13. Archive-name: kernel/xoper12.2
  14.  
  15. # This is a shell archive.  Remove anything before this line
  16. # then unpack it by saving it in a file and typing "sh file"
  17. # (Files unpacked will be owned by you and have default permissions).
  18. # This archive contains the following files:
  19. #    Xoper.a1
  20. #
  21. if `test ! -s Xoper.a1`
  22. then
  23. echo "writing Xoper.a1"
  24. cat > Xoper.a1 << '\Rogue\Monster\'
  25. ******************************************
  26. *                                        *
  27. * Xoper 1.2 Copyright (C) Werner Gunther *
  28. *                                        *
  29. ******************************************
  30. *    Written for the A68K Assembler      *
  31. *   (Fish 110) by Charlie Gibbs and      *
  32. *          Brian R. Anderson             *
  33. *                                        *
  34. *  Do not use Smallcode/Smalldata when   *
  35. *             linking                    *
  36. ******************************************
  37.  
  38. ;DEBUG SET 1
  39.             XREF    _LVOSwitch
  40.             XDEF    _SysBase
  41. sysbase     equ     4
  42.  
  43. CALL        MACRO
  44.             xref    _LVO\1
  45.             move.l  \2,a6
  46.             jsr     _LVO\1(a6)
  47.             ENDM
  48. LIBCALL     MACRO
  49.             xref    _\1
  50.             jsr     _\1
  51.             ENDM
  52.  
  53. ADDCMD      MACRO
  54. cmdnum      set     cmdnum+1
  55.             dc.b    \1,0
  56.             ENDM
  57.  
  58. ;Program startup. If called from DOS we
  59. ;use segment splitting to detach
  60. ;from our DOS-task.
  61. ;A0 points to parameter area,
  62. ;D0 holds its length.
  63. start       move.l  a0,parmtxt
  64.             move.b  d0,d5
  65.             lea     dosname(PC),a1
  66.             move.l  sysbase,a0
  67.             lea     378(a0),a0
  68.             move.l  a0,-(a7)
  69.             CALL    FindName,sysbase
  70.             move.l  d0,dosbase
  71.             move.l  0(a7),a0
  72.             lea     gfxname(PC),a1
  73.             CALL    FindName,sysbase
  74.             move.l  d0,gfxbase
  75.             move.l  (a7)+,a0
  76.             lea     intuiname(PC),a1
  77.             CALL    FindName,sysbase
  78.             move.l  d0,intuibase
  79.             move.l  d0,a0
  80.             move.l  $38(a0),a0
  81.             move.w  12(a0),d0
  82.             sub.w   #550,d0
  83.             move.w  d0,window_l
  84.  
  85.             move.l  sysbase,a4
  86.             move.l  276(a4),a4
  87.             tst.l   $ac(a4)
  88.             bne.s   notwb
  89.             lea     $5c(a4),a0
  90.             CALL    WaitPort,sysbase
  91.             lea     $5c(a4),a0
  92.             CALL    GetMsg,sysbase
  93.             move.l  d0,wbmsg
  94.             move.w  #$740a,in
  95. notwb:
  96.        IFND  DEBUG
  97.             lea     newname,a1
  98.             CALL    FindTask,sysbase
  99.             tst.l   d0
  100.             bne     oops
  101.        ENDC
  102.             tst.l   wbmsg
  103.             beq.s   fromdos
  104.             jmp     mainprg
  105.  
  106. fromdos     lea     in,a3
  107.             clr.l   d7
  108.             move.b  d5,d7
  109.             move.l  parmtxt,a4
  110. trans       move.b  (a4)+,(a3)+
  111.             dbf     d7,trans
  112.  
  113.             cmpi.b  #1,d5
  114.             bne.s   starttask
  115.             move.w  #$740a,in
  116. starttask:
  117.  
  118.         IFND DEBUG
  119.             lea     start(PC),a1
  120.             suba.l  #4,a1
  121.             move.l  0(a1),d3
  122.             move.l  d3,myseg
  123.             clr.l   0(a1)
  124.             CALL    Forbid,sysbase
  125.             move.l  #newname,d1
  126.             clr.l   d2
  127.             move.l  #3500,d4
  128.             CALL    CreateProc,dosbase
  129.             clr.l   d1
  130.             CALL    Exit,dosbase
  131. oops        suba.l  a0,a0
  132.             CALL    DisplayBeep,intuibase
  133.             CALL    Forbid,sysbase
  134.             move.l  wbmsg,d0
  135.             beq.s   leave
  136.             move.l  d0,a1
  137.             CALL    ReplyMsg,sysbase
  138.             clr.l   d0
  139. leave       rts
  140.  
  141. dosname     dc.b    'dos.library',0
  142. intuiname   dc.b    'intuition.library',0
  143. gfxname     dc.b    'graphics.library',0
  144.             EVEN
  145.  
  146. main        CODE    xoper
  147.         ENDC
  148. mainprg     move.l  sysbase,a0
  149.             move.l  a0,_SysBase
  150.             move.l  276(a0),a0
  151.             move.l  a0,mytask
  152.             move.l  #newname,10(a0)
  153.             pea     0
  154.             pea     0
  155.             LIBCALL CreatePort
  156.             lea     8(a7),a7
  157.             move.l  d0,replyport
  158. ;install a counter to determine the amount of CPU-time each
  159. ;Task uses.
  160.             move.l  _SysBase(PC),a1
  161.             move.l  #_LVOSwitch,a0
  162.             move.l  2(a1,a0),oldswitch
  163.             move.l  #myswitch,d0
  164.             CALL    SetFunction,_SysBase(PC)
  165.  
  166.             cmp.w   #'-b',in
  167.             bne.s   restart
  168.             move.w  #$740a,in
  169.             bra     instback
  170.  
  171. ;This code just opens a CON: Window. Position
  172. ;and size are taken from window_l,window_t,
  173. ;window_w,window_h.
  174.  
  175. restart     move.l  mytask(PC),a0
  176.             clr.l   26(a0)
  177.             lea     fname,a0
  178.             move.l  #'con:',0(a0)
  179.             clr.b   4(a0)
  180.             lea     binarea(PC),a1
  181.             lea     window_l(PC),a2
  182.             move.l  #3,d4
  183. rest1       move.l  #2,d3
  184.             clr.l   d0
  185.             move.w  (a2)+,d0
  186.             bsr     longdec
  187.             bsr     strcat
  188.             move.w  #$2f00,binarea
  189.             bsr     strcat
  190.             dbf     d4,rest1
  191.             lea     windowname(PC),a1
  192.             bsr     strcat
  193.             move.l  a0,d1
  194.             move.l  #1005,d2
  195.             CALL    Open,dosbase(PC)
  196.             move.l  d0,fileptr
  197.             lsl.l   #2,d0
  198.             move.l  d0,a4
  199.             move.l  8(a4),conmsg
  200. ;get a pointer to our window
  201.             move.l  #buffer,d0
  202.             lsr.l   #2,d0
  203.             move.l  d0,dp_Arg1
  204.             move.l  conmsg,a0
  205.             move.l  #25,dp_Type
  206.             bsr     cons1
  207.             lea     buffer,a0
  208.             move.l  28(a0),window
  209.  
  210.             clr.l   ptr
  211.  
  212. ;show a list. The string entered from keyboard is stored
  213. ;in 'in'.Every character is interpreted as one command
  214. ;i.e. 'rip' means 'resources'+'interrupts'+'ports'.
  215. showwhat    bsr     raw
  216.             bsr     clearscr
  217.             tst.b   morefl
  218.             beq.s   swh1
  219. ;if <MORE> is enabled we need to know how many lines can
  220. ;fit into our window
  221.             move.l  #getwin,d2
  222.             move.l  fileptr,d1
  223.             moveq.l #4,d3
  224.             CALL    Write,dosbase(PC)
  225.             move.l  fileptr,d1
  226.             move.l  #9,d3
  227.             move.l  #buffer,d2
  228.             CALL    Read,dosbase(PC)
  229.             lea     buffer,a0
  230.             lea     5(a0),a0
  231.             bsr     isdec
  232.             subq.b  #1,d2
  233.             move.b  d2,rows
  234.             clr.b   row
  235. ;search the command to be executed. If none is found,
  236. ;show a help message
  237. swh1        clr.l   d7
  238. input       lea     in,a0
  239.             move.b  0(a0,d7),d0
  240.             addq.b  #1,d7
  241.             cmpi.b  #' ',d0
  242.             beq.s   input
  243.             cmpi.b  #10,d0
  244.             beq     nomore
  245.             or.b    #32,d0
  246.             cmpi.b  #'q',d0
  247.             beq     exit
  248.             lea     params(PC),a0
  249.             clr.l   d1
  250. i1          cmp.b   0(a0,d1),d0
  251.             beq.s   foundp
  252.             addq.b  #1,d1
  253.             cmpi.b  #parmnum,d1
  254.             bne.s   i1
  255.  
  256.             move.l  #usetxt,d0
  257.             move.b  #1,mnflag
  258.             bsr     putnam
  259.             clr.b   mnflag
  260.             bra     nomore
  261.  
  262. foundp      lsl.b   #2,d1
  263.             lea     subs(PC),a0
  264.             move.b  #1,mnflag
  265.             jsr     0(a0,d1)
  266.             clr.b   mnflag
  267.             bra.s   input
  268.  
  269. ;wait 'timeout' seconds for a kepress
  270.  
  271. nomore      move.l  #prompt,d2
  272.             move.l  fileptr,d1
  273.             moveq.l #7,d3
  274.             CALL    Write,dosbase(PC)
  275.             bsr     con
  276.             move.b  timeout,d6
  277. halt        move.l  #1000000,d4
  278.             bsr     getkey
  279.             move.l  mytask(PC),a0
  280.             move.l  26(a0),d1
  281.             and.l   #$1000,d1
  282.             bne     exit
  283.             tst.l   d0
  284.             bne.s   cli
  285.             subq.b  #1,d6
  286.             bne.s   halt
  287.             clr.l   d4
  288.             bsr     getkey
  289.             tst.l   d0
  290.             bne.s   cli
  291.             bra     showwhat
  292.  
  293. getkey      move.l  fileptr,d1
  294.             moveq.l #1,d3
  295.             move.l  #null,d2
  296.             CALL    Write,dosbase(PC)
  297.             move.l  d4,d2
  298.             move.l  fileptr,d1
  299.             CALL    WaitForChar,dosbase(PC)
  300.             rts
  301. ;read the string from keyboard search and execute
  302. ;the command, if any.
  303. cli         bsr     readline
  304.             lea     dummy,a0
  305.             subq.b  #1,d0
  306. cl2         subq.b  #1,d0
  307.             bmi.s   cl1
  308.             cmp.b   #' ',0(a0,d0)
  309.             beq.s   cl2
  310. cl1         addq.b  #1,d0
  311.             move.b  #10,0(a0,d0)
  312.             bsr     kllblnks
  313.             cmpi.b  #10,0(a0)
  314.             beq     showwhat
  315.             lea     in,a1
  316.             lea     commds(PC),a2
  317.             clr.b   d2
  318. tstcmd      move    #-1,d1
  319. tc2         addq    #1,d1
  320.             move.b  0(a0,d1),d3
  321.             or.b    #32,d3
  322.             tst.b   0(a2,d1)
  323.             beq.s   foundcmd
  324.             cmp.b   0(a2,d1),d3
  325.             beq.s   tc2
  326. nocmd       tst.b   (a2)+
  327.             bne.s   nocmd
  328.             addq.b  #1,d2
  329.             cmpi.b  #cmdnum,d2
  330.             bne     tstcmd
  331.             bra.s   nm1
  332. foundcmd    cmpi.b  #'*',d3
  333.             beq.s   okcmd
  334.             cmpi.b  #' ',d3
  335.             bne.s   nocmd
  336. okcmd       clr.b   procnum
  337.             adda.w  d1,a0
  338.             bsr     kllblnks
  339.             and.l   #$ff,d2
  340.             lsl     #2,d2
  341.             lea     cmdaddr(PC),a1
  342.             clr.b   printed
  343.             jsr     0(a1,d2)
  344.             tst.b   morefl
  345.             beq     nomore
  346.             tst.b   printed
  347.             beq     nomore
  348.             move.l  #10,d3
  349.             move.l  fileptr,d1
  350.             move.l  #waittxt,d2
  351.             CALL    Write,dosbase(PC)
  352.             bsr     readline
  353.             move.l  #4,d3
  354.             move.l  fileptr,d1
  355.             move.l  #thisline,d2
  356.             CALL    Write,dosbase(PC)
  357.             bra     nomore
  358.  
  359. nm1         lea     buffer,a2
  360. nm2         move.b  (a1)+,(a2)+
  361.             cmp.b   #10,-1(a1)
  362.             bne.s   nm2
  363.             lea     in,a1
  364. nm0         move.b  (a0)+,(a1)+
  365.             dbf     d0,nm0
  366.             lea     dummy,a2
  367.             lea     buffer,a1
  368. nm3         move.b  (a1)+,(a2)+
  369.             cmp.b   #10,-1(a1)
  370.             bne.s   nm3
  371.             bra     showwhat
  372.  
  373. subs        bra     showtask
  374.             bra     showaddr
  375.             bra     showdevs
  376.             bra     showlibs
  377.             bra     showres
  378.             bra     showresi
  379.             bra     showmem
  380.             bra     showprt
  381.             bra     showint
  382. cmdaddr     bra     settime
  383.             bra     taskpri
  384.             bra     info
  385.             bra     pri
  386.             bra     flush
  387.             bra     freeze
  388.             bra     warm
  389.             bra     signal
  390.             bra     break
  391.             bra     alert
  392.             bra     lastalert
  393.             bra     hold
  394.             bra     stopall
  395.             bra     clear
  396.             bra     cancel
  397.             bra     moretst
  398.             bra     taskports
  399.             bra     hunks
  400.             bra     devices
  401.             bra     openlib
  402.             bra     closelib
  403.             bra     currentdir
  404.             bra     cd
  405.             bra     mypri
  406.             bra     openfiles
  407.             bra     locks
  408.             bra     unlock
  409.             bra     screens
  410.             bra     windows
  411.             bra     closescreen
  412.             bra     closewindow
  413.             bra     fonts
  414.             bra     windowfonts
  415.             bra     lockdrive
  416.             bra     freedrive
  417.             bra     capture
  418.             bra     clrcold
  419.             bra     clrcool
  420.             bra     clrwarm
  421.             bra     snoop
  422.             bra     usage
  423.  
  424. ;------ Task-Structures-----
  425.  
  426. showaddr    clr.b   tasktyp
  427.             bra.s   startask
  428. showtask    move.b  #1,tasktyp
  429. startask    move.l  #infoh1,d0
  430.             bsr     putstr
  431.             move.l  _SysBase(PC),a6
  432.             move.l  #cpu2,d0
  433.             btst    #1,297(a6)
  434.             bne.s   cpupr
  435.             move.l  #cpu1,d0
  436.             btst    #0,297(a6)
  437.             bne.s   cpupr
  438.             move.l  #cpu0,d0
  439. cpupr       bsr     putstr
  440.             move.l  _SysBase(PC),a6
  441.             btst    #2,297(a6)
  442.             beq.s   no881
  443.             move.l  #cpu3,d0
  444.             bsr     putstr
  445. no881       move.l  #20,d1
  446.             bsr     tab
  447.             move.l  #infoh3,d0
  448.             bsr     putstr
  449.             move.l  _SysBase(PC),a6
  450.             move.w  #$4000,$dff09a
  451.             move.l  280(a6),d0
  452.             move.l  284(a6),d1
  453.             move.l  oldidl,d3
  454.             move.l  d0,oldidl
  455.             sub.l   d3,d0
  456.             move.l  olddisp,d3
  457.             move.l  d1,olddisp
  458.             sub.l   d1,d3
  459.             move.l  d0,d1
  460.             sub.l   d3,d1
  461.             move.l  d1,maxdisp
  462.             move.l  d3,-(a7)
  463.             movem.l d0-d3,-(a7)
  464.             bsr     getaskdat
  465.             move.l  a5,savedat
  466.             movem.l (a7)+,d0-d3
  467.             sub.l   d3,d0
  468.             neg.l   d3
  469.             bsr     prcent
  470.             bsr     newline
  471.             move.l  #infoh2,d0
  472.             bsr     putstr
  473.             move.l  (a7)+,d0
  474.             neg.l   d0
  475.             move.l  d0,dispatches
  476.             clr.l   d3
  477.             bsr     longdec
  478.             move.l  #27,d1
  479.             bsr     tab
  480.             move.l  #infoh6,d0
  481.             bsr     putstr
  482.             move.l  olddisp(PC),d0
  483.             bsr     longdec
  484.  
  485.             bsr     newline
  486.             bsr     newline
  487.             lea     theader(PC),a0
  488.             tst.b   tasktyp
  489.             bne.s   phedder
  490.             lea     t2header(PC),a0
  491. phedder     bsr     puthead
  492.             move.l  savedat(PC),a5
  493.  
  494. pt1         tst.b   entries
  495.             beq     pt2
  496.             lea     -16(a5),a5
  497.             move.l  0(a5),a4
  498.             move.l  a4,d0
  499.             bsr     hexa
  500.             tst.b   tasktyp
  501.             beq.s   pt12
  502.             clr.l   d0
  503.             move.b  8(a4),d0
  504.             bsr     gettype
  505.  
  506. pt12        clr.l   d0
  507.             move.b  9(a5),d0
  508.             subq.b  #1,d0
  509.             mulu    #10,d0
  510.             move.l  #status,d1
  511.             add.l   d1,d0
  512.             bsr     putstr
  513.             tst.b   tasktyp
  514.             bne.s   pt13
  515.  
  516.             move.l  18(a4),d0
  517.             bsr     hex8
  518.             move.l  #ganzlongnix,d0
  519.             cmp.b   #4,9(a5)
  520.             beq.s   pt14
  521.             bsr     putstr
  522.             bra.s   pt15
  523. pt14        move.l  22(a4),d0
  524.             bsr     hex8
  525. pt15        move.l  26(a4),d0
  526.             bsr     hex8
  527.             move.l  54(a4),a1
  528.             move.l  0(a1),d0
  529.             cmp.b   #2,9(a5)
  530.             bne.s   pt16
  531.             move.l  #*,d0
  532. pt16        bsr     hexa
  533.             bra     pt4
  534.  
  535. pt13        move.b  10(a5),d3
  536.             bsr     plusmins
  537.  
  538.             move.l  dispatches(PC),d0
  539.             tst.b   usageflag
  540.             beq.s   pt37
  541.             move.l  maxdisp(PC),d0
  542. pt37        move.l  12(a5),d3
  543.             bsr     prcent
  544.  
  545.             clr.b   d3
  546.             cmpi.b  #13,8(a5)
  547.             bne.s   noproc
  548.             tst.l   172(a4)
  549.             beq.s   noproc
  550.             move.l  140(a4),d3
  551.             bsr     bytedec
  552.             bra.s   pt4
  553. noproc      move.l  #nix,d0
  554.             bsr     putstr
  555. pt4         move.l  4(a5),d0
  556.             bsr     putnam
  557.             subq.b  #1,entries
  558.             bra     pt1
  559. pt2         rts
  560.  
  561. putlist     move.l  0(a4),a4
  562.             tst.l   0(a4)
  563.             beq.s   endlist
  564.             bsr     putdata
  565.             bra.s   putlist
  566. endlist     rts
  567.  
  568. putdata     move.l  a4,0(a5)
  569.             move.l  10(a4),4(a5)
  570.             move.b  8(a4),8(a5)
  571.             move.b  15(a4),9(a5)
  572.             move.b  9(a4),10(a5)
  573.             move.b  143(a4),11(a5)
  574.             clr.l   12(a5)
  575.             lea     cputime,a0
  576.             move.l  tasksnum(PC),d1
  577.             beq.s   pua1
  578. pua3        cmp.l   0(a0),a4
  579.             beq.s   pua2
  580.             lea     8(a0),a0
  581.             dbf     d1,pua3
  582.             bra.s   pua1
  583. pua2        move.l  4(a0),12(a5)
  584. pua1        lea     16(a5),a5
  585.             addq.b  #1,entries
  586.             rts
  587.  
  588. gettype     and.l   #$f,d0
  589.             mulu    #11,d0
  590.             add.l   #type,d0
  591.             bra     putstr
  592.  
  593. getaskdat   lea     buffer,a5
  594.             clr.b   entries
  595.             lea     stplist(PC),a4
  596.             bsr     putlist
  597.             move.l  _SysBase(PC),a4
  598.             lea     420(a4),a4
  599.             bsr     putlist
  600.             move.l  _SysBase(PC),a4
  601.             lea     406(a4),a4
  602.             bsr     putlist
  603.             move.l  _SysBase(PC),a4
  604.             move.l  276(a4),a4
  605.             bsr     putdata
  606.             clr.l   tasksnum
  607.             move.w  #-$4000,$dff09a
  608.             rts
  609.  
  610. prcent      lsl.l   #1,d3
  611.             move.l  d3,d1
  612.             lsl.l   #2,d3
  613.             add.l   d1,d3
  614.             lsl.l   #2,d3
  615.             move.l  d3,d1
  616.             lsl.l   #3,d3
  617.             move.l  d3,d2
  618.             lsl.l   #1,d3
  619.             add.l   d2,d3
  620.             add.l   d1,d3
  621.             move.l  d0,d1
  622.             move.l  d3,d0
  623.             bsr     div
  624.             divu    #10,d0
  625.             move    d0,d3
  626.             swap    d0
  627.             move    d0,d1
  628.             bsr     bytedec
  629.             lea     out,a0
  630.             move.b  #'.',-1(a0,d0)
  631.             or.b    #'0',d1
  632.             move    d1,d0
  633.             bsr     putchar
  634.             move.l  #infoh4,d0
  635.             bra     putstr
  636. *-------- mem-hunks ------------
  637.  
  638. showmem     lea     mheader(PC),a0
  639.             bsr     puthead
  640.             move.l  _SysBase(PC),a5
  641.             lea     322(a5),a5
  642.             clr.l   d5
  643. mem1        move.l  0(a5),a5
  644.             tst.l   0(a5)
  645.             beq.s   mem2
  646.             move.l  20(a5),d0
  647.             bsr     hexa
  648.             move.l  24(a5),d0
  649.             bsr     hexa
  650.             move.l  28(a5),d0
  651.             add.l   d0,d5
  652.             moveq   #1,d3
  653.             bsr     longdec
  654.             move.b  15(a5),d3
  655.             bsr     bytedec
  656.             move.b  9(a5),d3
  657.             bsr     plusmins
  658.             move.l  10(a5),d0
  659.             bsr     putnam
  660.             bra.s   mem1
  661. mem2        move.l  #infoh6,d0
  662.             bsr     putstr
  663.             move.l  #15,d1
  664.             bsr     tab
  665.             move.l  d5,d0
  666.             bsr     longdec
  667. newline     move.l  #nxtline,d0
  668.             bra     putstr
  669.  
  670. *--------- interrupts ------------
  671. showint     lea     iheader(PC),a0
  672.             bsr     puthead
  673.             lea     intnames(PC),a5
  674.             lea     inttyp(PC),a4
  675.             move.l  #15,d5
  676.             move.l  _SysBase(PC),a3
  677.             lea     84(a3),a3
  678.  
  679. si0         tst.b   0(a4)
  680.             bne.s   si4
  681.             move.l  8(a3),a2
  682.             bra.s   si5
  683. si4         move.l  0(a3),a2
  684. si5         cmp.l   #0,a2
  685.             beq.s   nxtint
  686.             tst.b   0(a4)
  687.             beq.s   si1
  688. si2         move.l  0(a2),a2
  689.             tst.l   0(a2)
  690.             beq.s   nxtint
  691. si1         move.l  a2,d0
  692.             bsr     hexa
  693.             move.l  14(a2),d0
  694.             bsr     hexa
  695.             move.l  18(a2),d0
  696.             bsr     hexa
  697.             move.b  9(a2),d0
  698.             move.l  a3,-(a7)
  699.             bsr     plusmins
  700.             move.l  (a7)+,a3
  701.             move.l  a5,d0
  702.             bsr     putstr
  703.             move.l  10(a2),d0
  704.             tst.l   d0
  705.             bne.s   prtintnam
  706.             move.l  #ganzlongnix,d0
  707. prtintnam   bsr     putnam
  708.             tst.b   0(a4)
  709.             bne.s   si2
  710.             tst.l   0(a2)
  711.             beq.s   nxtint
  712.             move.l  0(a4),a4
  713.             bra     si1
  714. nxtint      lea     1(a4),a4
  715.             lea     12(a5),a5
  716.             lea     12(a3),a3
  717.             dbf     d5,si0
  718.             rts
  719.  
  720. *---------    resident ------------
  721.  
  722. showresi    lea     rheader(PC),a0
  723.             bsr     puthead
  724.             move.l  _SysBase(PC),a5
  725.             move.l  300(a5),a5
  726. r1          tst.l   0(a5)
  727.             beq     r2
  728.             move.l  0(a5),a4
  729.             move.l  a4,d0
  730.             bsr     hexa
  731.             move.b  13(a4),d3
  732.             bsr     plusmins
  733.             move.b  10(a4),d0
  734.             bsr     bin
  735.             move.b  11(a4),d3
  736.             bsr     bytedec
  737.             move.b  12(a4),d0
  738.             bsr     gettype
  739.             move.l  14(a4),d0
  740.             bsr     putnam
  741.             lea     4(a5),a5
  742.             bra     r1
  743. r2          rts
  744.  
  745. *---------  ports  -------------
  746.  
  747. showprt     lea     pheader(PC),a0
  748.             bsr     puthead
  749.             move.l  _SysBase(PC),a4
  750.             add.l   #392,a4
  751.             lea     buffer,a5
  752.             clr.l   d5
  753.             CALL    Forbid,_SysBase(PC)
  754. sp2         move.l  0(a4),a4
  755.             tst.l   0(a4)
  756.             beq.s   sp20
  757.             bsr     getpdata
  758.             bra.s   sp2
  759. sp20        tst.b   tports
  760.             beq.s   sp15
  761. sp1         move.w  #$4000,$dff09a
  762.             move.l  _SysBase(PC),a4
  763.             move.l  276(a4),a4
  764.             lea     92(a4),a4
  765.             bsr     getpdata
  766.             move.l  _SysBase(PC),a2
  767.             lea     406(a2),a2
  768. sp11        move.l  0(a2),a2
  769.             tst.l   0(a2)
  770.             beq.s   sp14
  771.             lea     92(a2),a4
  772.             cmp.b   #13,8(a2)
  773.             bne.s   sp11
  774.             bsr     getpdata
  775.             bra     sp11
  776. sp14        move.l  _SysBase(PC),a2
  777.             lea     420(a2),a2
  778. sp12        move.l  0(a2),a2
  779.             tst.l   0(a2)
  780.             beq.s   sp13
  781.             lea     92(a2),a4
  782.             cmp.b   #13,8(a2)
  783.             bne.s   sp12
  784.             bsr     getpdata
  785.             bra     sp12
  786. sp13        move.w  #-$4000,$dff09a
  787. sp15        CALL    Permit,_SysBase(PC)
  788.             lea     buffer,a5
  789. sp3         tst.b   d5
  790.             beq     sp6
  791.             move.l  0(a5),d0
  792.             bsr     hexa
  793.             move.l  4(a5),d0
  794.             bsr     putstr
  795.             move.l  #23,d1
  796.             bsr     tab
  797.             move.b  8(a5),d0
  798.             and.l   #3,d0
  799.             mulu    #9,d0
  800.             add.l   #mp_flags,d0
  801.             bsr     putstr
  802.             move.b  9(a5),d3
  803.             bsr     bytedec
  804.             move.b  14(a5),d3
  805.             bsr     bytedec
  806.             move.l  #ganzlongnix,d0
  807.             move.l  10(a5),a3
  808.             cmp.l   #0,a3
  809.             beq.s   sp8
  810.             move.l  10(a3),d1
  811.             move.l  d1,d2
  812.             andi.l  #$ff000000,d2
  813.             bne.s   sp8
  814.             move.l  d1,d0
  815. sp8         bsr     putnam
  816.             lea     16(a5),a5
  817.             subq.b  #1,d5
  818.             bra     sp3
  819. sp6         rts
  820.  
  821. getpdata    move.l  a4,0(a5)
  822.             move.l  10(a4),4(a5)
  823.             move.b  14(a4),8(a5)
  824.             move.b  15(a4),9(a5)
  825.             move.l  16(a4),10(a5)
  826.             clr.b   d0
  827.             movea.l 20(a4),a3
  828. sp10        movea.l 0(a3),a3
  829.             cmpa.l  #0,a3
  830.             beq.s   sp9
  831.             addq.b  #1,d0
  832.             cmp.b   #255,d0
  833.             bne.s   sp10
  834. sp9         move.b  d0,14(a5)
  835.             lea     16(a5),a5
  836.             addq.b  #1,d5
  837.             rts
  838. *-------- resources ------------
  839.  
  840. showres     lea     lheader(PC),a0
  841.             bsr     puthead1
  842.             lea     resnam(PC),a0
  843.             bsr     puthead2
  844.             move.l  _SysBase(PC),d5
  845.             add.l   #336,d5
  846.             bsr     show
  847.             rts
  848.  
  849. *--------- devices  -------------
  850.  
  851. showdevs    lea     lheader(PC),a0
  852.             bsr     puthead1
  853.             lea     devnam(PC),a0
  854.             bsr     puthead2
  855.             move.l  _SysBase(PC),d5
  856.             add.l   #350,d5
  857.             bsr     show
  858.             rts
  859.  
  860. *-------- libraries -------------
  861.  
  862. showlibs    lea     lheader(PC),a0
  863.             bsr     puthead1
  864.             lea     libnam(PC),a0
  865.             bsr     puthead2
  866.             move.l  _SysBase(PC),d5
  867.             add.l   #378,d5
  868.  
  869. show        lea     buffer,a5
  870.             clr.b   entries
  871.             CALL    Forbid,_SysBase(PC)
  872.             move.l  d5,a4
  873. sl1         move.l  0(a4),a4
  874.             tst.l   0(a4)
  875.             beq.s   sl2
  876.             addq.b  #1,entries
  877.             move.l  a4,0(a5)
  878.             move.l  10(a4),4(a5)
  879.             move.b  33(a4),8(a5)
  880.             move.b  21(a4),9(a5)
  881.             move.b  23(a4),10(a5)
  882.             move.b  14(a4),11(a5)
  883.             lea     12(a5),a5
  884.             bra.s   sl1
  885. sl2         CALL    Permit,_SysBase(PC)
  886.  
  887.             lea     buffer,a5
  888. dl3         tst.b   entries
  889.             beq.s   sl4
  890.             move.l  0(a5),d0
  891.             bsr     hexa
  892.             move.b  8(a5),d3
  893.             bsr     bytedec
  894.             move.b  9(a5),d3
  895.             bsr     bytedec
  896.             move.b  10(a5),d3
  897.             bsr     bytedec
  898.             move.b  11(a5),d0
  899.             bsr     bin
  900.             move.l  4(a5),d0
  901.             bsr     putnam
  902.             lea     12(a5),a5
  903.             subq.b  #1,entries
  904.             bra.s   dl3
  905. sl4         rts
  906.  
  907. ;find the first entry in the device-list
  908. ;returns a1 = pointer to first entry
  909.  
  910. devinfo     move.l  dosbase(PC),a1
  911.             move.l  34(a1),a1
  912.             move.l  24(a1),a1
  913.             adda.l  a1,a1
  914.             adda.l  a1,a1
  915.             move.l  4(a1),a1
  916.             rts
  917.  
  918. ;unlock a file
  919. unlock      bsr     readhex
  920.             tst.b   d7
  921.             beq     syntax
  922.             move.l  d0,remembr
  923.             move.l  d0,-(a7)
  924.             move    #-1,d6
  925.             bsr     of44
  926.             tst.l   remembr
  927.             beq.s   ul1
  928.             move.l  #unlerr,d0
  929.             bsr     putnam
  930.             bra     ul4
  931. ul1         move.l  #unl1,d0
  932.             bsr     putstr
  933.             move.l  0(a7),d0
  934.             bsr     getpath
  935.             move.l  #unltxt2,d0
  936.             bsr     putstr
  937.             bsr     readline
  938.             ori.b   #$20,dummy
  939.             cmp.b   #'y',dummy
  940.             bne.s   ul5
  941.             move.l  0(a7),d1
  942.             CALL    UnLock,dosbase
  943. ul5         bsr     freefinfo
  944. ul4         lea     4(a7),a7
  945.             rts
  946. ;---------- Show all Locks------------
  947. locks       clr.l   d6
  948.             bra.s   of33
  949.  
  950. ;---------- Open Files-----------
  951. openfiles   moveq   #1,d6
  952. of33        lea     ofheader(PC),a0
  953.             bsr     puthead
  954. of44        bsr     allocfinfo
  955.             bsr     devinfo
  956.             move.l  a1,a3
  957. of1         adda.l  a3,a3
  958.             adda.l  a3,a3
  959.             cmp.l   #2,4(a3)
  960.             bne     of2
  961.             move.l  40(a3),d0
  962.             lsl.l   #2,d0
  963.             move.l  d0,a4
  964.             clr.l   d3
  965.             move.b  (a4)+,d3
  966.             subq    #1,d3
  967.             lea     buffer,a5
  968. of22        move.b  (a4)+,(a5)+
  969.             dbf     d3,of22
  970.             move.b  #':',(a5)+
  971.             clr.b   0(a5)
  972.             cmp.l   #'RAM ',buffer
  973.             bne.s   of5
  974.             cmp.l   #'Disk',buffer+4
  975.             bne.s   of5
  976.             move.l  #$4d3a0000,buffer+2
  977. of5         move.l  #buffer,d1
  978.             move.l  #-2,d2
  979.             CALL    Lock,dosbase(PC)
  980.             tst.l   d0
  981.             bne.s   of6
  982.             move.l  #buffer,d0
  983.             bsr     putstr
  984.             move.l  #nomount,d0
  985.             bsr     putnam
  986.             bra     of2
  987.  
  988. of6         move.l  d0,-(a7)
  989.             lsl.l   #2,d0
  990.             move.l  d0,a5
  991. of4         move.l  0(a5),d0
  992.             cmp.l   #50,d0
  993.             ble     of3
  994.             move.l  d0,d5
  995.             lsl.l   #2,d5
  996.             move.l  d5,a5
  997.             move.l  d0,d5
  998.             tst     d6
  999.             bpl.s   of45
  1000.  
  1001.             cmp.l   remembr(PC),d0
  1002.             bne.s   of3
  1003.             clr.l   remembr
  1004.             move.l  (a7)+,d1
  1005.             CALL    UnLock,dosbase(PC)
  1006.             rts
  1007.  
  1008. of45        move.l  8(a5),d4
  1009.             bsr     getfinfo
  1010.             move.l  finfoptr,a4
  1011.  
  1012.             tst.l   d6
  1013.             beq.s   of8
  1014.             bmi.s   of8
  1015.             tst.l   4(a4)
  1016.             bpl     of4
  1017. of8         move.l  d5,d0
  1018.             bsr     hexa
  1019.             move.l  #access,d0
  1020.             cmp     #-2,d4
  1021.             beq.s   of7
  1022.             add.l   #8,d0
  1023. of7         bsr     putstr
  1024.             tst.l   4(a4)
  1025.             bmi.s   of9
  1026.             move.l  #longnix,d0
  1027.             bsr     putstr
  1028.             bra     of10
  1029. of9         move.l  124(a4),d0
  1030.             bsr     longdec
  1031. of10        move.l  d5,d0
  1032.             bsr     getpath
  1033.             bra     of4
  1034.  
  1035.             bsr     newline
  1036. of3         move.l  (a7)+,d1
  1037.             CALL    UnLock,dosbase(PC)
  1038. of2         move.l  0(a3),a3
  1039.             cmpa.l  #0,a3
  1040.             bne     of1
  1041.             bsr     freefinfo
  1042.             rts
  1043.  
  1044. ;---------- Dos Devices ----------
  1045.  
  1046. devices     lea     ddheader(PC),a0
  1047.             bsr     puthead
  1048.             bsr     devinfo
  1049. dev1        adda.l  a1,a1
  1050.             adda.l  a1,a1
  1051.             clr.b   d6
  1052.             tst.l   4(a1)
  1053.             bne     dev2
  1054.             move.l  40(a1),d0
  1055.             bsr     putbcpl
  1056.             move.l  #10,d1
  1057.             bsr     tab
  1058.             cmp.l   #20,28(a1)
  1059.             ble     dev9
  1060.             moveq   #1,d6
  1061.             move.l  28(a1),a3
  1062.             adda.l  a3,a3
  1063.             adda.l  a3,a3
  1064.             cmp.l   #20,8(a3)
  1065.             ble     dev9
  1066.             move.l  8(a3),a2
  1067.             adda.l  a2,a2
  1068.             adda.l  a2,a2
  1069.             move.l  12(a2),d3
  1070.             movem.l a1-a3,-(a7)
  1071.             bsr     bytedec
  1072.             movem.l (a7)+,a1-a3
  1073.             moveq   #1,d3
  1074.             move.l  20(a2),d0
  1075.             bsr     longdec
  1076.             move.l  40(a2),d0
  1077.             beq.s   devs20
  1078.             addq    #1,d0
  1079.             sub.l   36(a2),d0
  1080. devs20      bsr     longdec
  1081.             move.l  44(a2),d0
  1082.             bsr     longdec
  1083.             bra.s   dev8
  1084. dev9        move.l  #notfile,d0
  1085.             bsr     putstr
  1086. dev8        tst.l   8(a1)
  1087.             beq.s   dev6
  1088.             move.l  #devload,d0
  1089.             bra.s   dev5
  1090. dev6        move.l  #devnload,d0
  1091. dev5        bsr     putstr
  1092.             tst.b   d6
  1093.             beq.s   dev7
  1094.             move.l  4(a3),d0
  1095.             bne.s   dev4
  1096. dev7        move.l  16(a1),d0
  1097.             bne.s   dev4
  1098.             tst.l   8(a1)
  1099.             beq.s   dev11
  1100.             move.l  8(a1),a3
  1101.             move.l  -82(a3),d0
  1102.             bsr     putstr
  1103.             bra     dev11
  1104. dev4        bsr     putbcpl
  1105. dev11       bsr     newline
  1106. dev2        move.l  0(a1),a1
  1107.             cmpa.l  #0,a1
  1108.             bne     dev1
  1109.             rts
  1110.  
  1111. ; Check if a named dos-device is mounted
  1112. ; name in 'buffer'.
  1113. ; Result: d0 = 0(false) anything else(true).
  1114.  
  1115. finddev     bsr     devinfo
  1116. fdev1       adda.l  a1,a1
  1117.             adda.l  a1,a1
  1118.             clr.b   d6
  1119.             tst.l   4(a1)
  1120.             bne.s   fdev2
  1121.             move.l  40(a1),a2
  1122.             lea     buffer,a0
  1123.             bsr     strbcmp
  1124.             tst     d0
  1125.             bne.s   fdev3
  1126. fdev2       move.l  0(a1),a1
  1127.             cmpa.l  #0,a1
  1128.             bne.s   fdev1
  1129. fdev3       rts
  1130.  
  1131. ; Re-assign a drive to dos
  1132.  
  1133. freedrive   clr.l   dp_Arg1
  1134.             bra     ldr3
  1135.  
  1136. ; Inhibit a disk drive
  1137.  
  1138. lockdrive   move.l  #1,dp_Arg1
  1139. ldr3        bsr     getstr
  1140.             bsr     finddev
  1141.             bne.s   ldr1
  1142. ldr2        move.l  #buffer,d0
  1143.             bsr     putstr
  1144.             move.l  #nomount,d0
  1145.             bra     putstr
  1146.             move.l  #dishelp,d0
  1147.             bra     putnam
  1148. ldr1        move.l  #buffer,d1
  1149.             CALL    DeviceProc,dosbase(PC)
  1150.             tst.l   d0
  1151.             beq.s   ldr2
  1152.             move.l  d0,a0
  1153.             move.l  #31,dp_Type
  1154.             bra     cons1
  1155.  
  1156. ;display the current directory of all processes,
  1157. ;except Workbench.(Worbench pr_CurrentDir is not a lock)
  1158.  
  1159. currentdir  lea     wbname(PC),a1
  1160.             CALL    FindTask,_SysBase(PC)
  1161.             move.l  d0,wbaddr
  1162.             lea     cdheader(PC),a0
  1163.             bsr     puthead
  1164.             bsr     allocfinfo
  1165.             bsr     getaskdat
  1166.             lea     buffer,a5
  1167. cd2         tst.b   entries
  1168.             beq.s   cd6
  1169.             cmp.b   #13,8(a5)
  1170.             bne.s   cd5
  1171.             move.l  wbaddr(PC),d0
  1172.             cmp.l   0(a5),d0
  1173.             beq.s   cd5
  1174.             move.l  4(a5),d0
  1175.             bsr     putstr
  1176.             move.l  #15,d1
  1177.             bsr     tab
  1178.             move.l  0(a5),a4
  1179.             move.l  152(a4),d0
  1180.             bne.s   cd1
  1181.             move.l  #syst,d0
  1182.             bsr     putnam
  1183.             bra.s   cd5
  1184. cd1         bsr     getpath
  1185. cd5         subq.b  #1,entries
  1186.             lea     12(a5),a5
  1187.             bra.s   cd2
  1188. cd6         bsr     freefinfo
  1189.             rts
  1190.  
  1191. ;Change the current directory setting of a process
  1192.  
  1193. cd          move.l  a0,-(a7)
  1194.             lea     wbname(PC),a1
  1195.             CALL    FindTask,_SysBase(PC)
  1196.             move.l  d0,wbaddr
  1197.             move.l  (a7)+,a0
  1198.             bsr     getstr
  1199.             move.l  a0,-(a7)
  1200.             move.l  #buffer,d1
  1201.             move.l  #-2,d2
  1202.             CALL    Lock,dosbase(PC)
  1203.             move.l  (a7)+,a0
  1204.             tst.l   d0
  1205.             bne     cd16
  1206.             move.l  #dnotf,d0
  1207.             bra     putnam
  1208. cd16        move.l  d0,remembr
  1209.             move.l  a0,-(a7)
  1210.             bsr     allocfinfo
  1211.             move.l  remembr(PC),d0
  1212.             bsr     getfinfo
  1213.             move.l  finfoptr,a5
  1214.             move.l  (a7)+,a0
  1215.             tst.l   4(a5)
  1216.             bpl.s   cd11
  1217.             move.l  #notdir,d0
  1218.             bsr     putnam
  1219.             bra     cd18
  1220. cd11        bsr     nodenam
  1221.             moveq.l #2,d7
  1222.             lea     TRuNode(PC),a4
  1223.             bsr     findnam
  1224.             tst.b   d7
  1225.             beq.s   cd15
  1226.             move.l  d0,a5
  1227.             cmp.b   #13,8(a5)
  1228.             beq.s   cd15
  1229.             bsr     syntax
  1230.             bra     cd18
  1231. cd15        cmp.l   wbaddr,d0
  1232.             bne.s   cd13
  1233.             move.l  #wberr,d0
  1234.             bsr     putnam
  1235.             bra     cd12
  1236. cd13        move.l  152(a5),d1
  1237.             move.l  remembr,152(a5)
  1238.             move.l  d1,remembr
  1239. cd12        tst.l   remembr
  1240.             beq.s   cd14
  1241.             move.l  #unltxt,d0
  1242.             bsr     putstr
  1243.             move.l  remembr(PC),d0
  1244.             bsr     getpath
  1245.             move.l  #unltxt2,d0
  1246.             bsr     putstr
  1247.             bsr     readline
  1248.             ori.b   #$20,dummy
  1249.             cmp.b   #'y',dummy
  1250.             bne.s   cd14
  1251. cd18        move.l  remembr(PC),d1
  1252.             beq.s   cd14
  1253.             CALL    UnLock,dosbase(PC)
  1254. cd14        bsr     freefinfo
  1255. cd10        rts
  1256.  
  1257. ;get all screen pointers.
  1258. ;result: d5=number of screens
  1259. ;        buffer+100 holds pointers.
  1260.  
  1261. getscr      lea     scrheader(PC),a0
  1262.             bsr     puthead
  1263. getscr2     move.l  intuibase(PC),a2
  1264.             move.l  60(a2),a2
  1265.             lea     buffer+100,a1
  1266.             move.w  #$4000,$dff09a
  1267.             clr.l   d5
  1268. sr1         move.l  a2,(a1)+
  1269.             move.l  0(a2),a2
  1270.             addq.l  #1,d5
  1271.             cmpa.l  #0,a2
  1272.             bne.s   sr1
  1273.             subq    #1,d5
  1274.             move.w  #-$4000,$dff09a
  1275.             rts
  1276.  
  1277. ;display screen addresses and titles
  1278.  
  1279. screens     bsr     getscr
  1280.             moveq   #1,d6
  1281.             lea     buffer+100,a1
  1282. sr2         move    d6,d3
  1283.             bsr     bytedec
  1284.             move.l  0(a1),d0
  1285.             bsr     hexa
  1286.             move.l  (a1)+,a2
  1287.             move.l  22(a2),d0
  1288.             bsr     putnam
  1289.             addq    #1,d6
  1290.             dbf     d5,sr2
  1291.             rts
  1292.  
  1293. ;display window addresses and titles
  1294.  
  1295. windows     clr.b   bool
  1296. windows1    bsr     getscr
  1297.             tst.b   bool
  1298.             beq.s   wn20
  1299.             move.l  d5,-(a7)
  1300.             lea     fohead(PC),a0
  1301.             bsr     puthead
  1302.             move.l  (a7)+,d5
  1303. wn20        lea     buffer+100,a4
  1304. wn2         move.l  #onscr,d0
  1305.             bsr     putstr
  1306.             move.l  (a4)+,a2
  1307.             move.l  22(a2),d0
  1308.             bsr     putnam
  1309.             move.l  4(a2),a1
  1310.             clr     d6
  1311. wn1         cmpa.l  #0,a1
  1312.             beq.s   wn3
  1313.             addq    #1,d6
  1314.             move.l  d6,d3
  1315.             bsr     bytedec
  1316.             move.l  a1,d0
  1317.             bsr     hexa
  1318.             move.l  32(a1),d0
  1319.             bsr     putnam
  1320.  
  1321.             tst.b   bool
  1322.             beq.s   wn21
  1323.             move.l  a1,-(a7)
  1324.             move.l  50(a1),a1
  1325.             move.l  52(a1),a1
  1326.             bsr     fontdata
  1327.             move.l  (a7)+,a1
  1328.  
  1329. wn21        move.l  0(a1),a1
  1330.             bra.s   wn1
  1331. wn3         dbf     d5,wn2
  1332.             rts
  1333.  
  1334. ;close a specified screen
  1335.  
  1336. closescreen bsr     getscr2
  1337.             moveq   #1,d6
  1338.             cmp.b   #'$',0(a0)
  1339.             bne.s   cs1
  1340.             bsr     readhex
  1341.             tst     d7
  1342.             beq     syntax
  1343.             move.l  d0,d4
  1344. csin        clr.l   d6
  1345. cs1         lea     buffer+100,a2
  1346. cs5         tst     d6
  1347.             bne.s   cs2
  1348.             cmp.l   (a2)+,d4
  1349.             beq.s   cs3
  1350.             bra.s   cs4
  1351. cs2         move.l  (a2)+,a1
  1352.             move.l  22(a1),a1
  1353.             bsr     strcmp
  1354.             tst     d0
  1355.             beq.s   cs3
  1356. cs4         dbf     d5,cs5
  1357.             move.l  #scnofound,d0
  1358.             bra     putnam
  1359. cs3         move.l  -4(a2),a0
  1360.             CALL    CloseScreen,intuibase(PC)
  1361.             rts
  1362.  
  1363. ;close a specified window
  1364.  
  1365. closewindow bsr     getscr2
  1366.             moveq   #1,d6
  1367.             cmp.b   #'$',0(a0)
  1368.             bne.s   cw1
  1369.             bsr     readhex
  1370.             tst     d7
  1371.             beq     syntax
  1372. cwin        move.l  d0,d4
  1373.             clr.l   d6
  1374. cw1         lea     buffer+100,a2
  1375. cw5         move.l  (a2)+,a4
  1376.             move.l  4(a4),a4
  1377. cw6         cmpa.l  #0,a4
  1378.             beq.s   cw4
  1379.             tst     d6
  1380.             bne.s   cw2
  1381.             cmp.l   a4,d4
  1382.             beq.s   cw3
  1383.             bra.s   cw7
  1384. cw2         move.l  32(a4),a1
  1385.             bsr     strcmp
  1386.             tst     d0
  1387.             beq.s   cw3
  1388. cw7         move.l  0(a4),a4
  1389.             bra.s   cw6
  1390. cw4         dbf     d5,cw5
  1391.             move.l  #winnofound,d0
  1392.             bra     putnam
  1393. cw3         move.l  a4,a0
  1394.             clr.l   d0
  1395.             CALL    ModifyIDCMP,intuibase(PC)
  1396.             move.l  a4,a0
  1397.             CALL    CloseWindow,intuibase(PC)
  1398.             rts
  1399.  
  1400. windowoff   movem.l d1-d7/a0-a6,-(a7)
  1401.             bsr     getscr2
  1402.             bsr     cwin
  1403.             move.l  -(a2),a0
  1404.             move.l  a0,d4
  1405.             tst.l   4(a0)
  1406.             bne.s   woff1
  1407.             bsr     getscr2
  1408.             bsr     csin
  1409. woff1       movem.l (a7)+,d1-d7/a0-a6
  1410.             rts
  1411.  
  1412. closetskwin movem.l d1-d7/a0-a6,-(a7)
  1413. ctw0        bsr     getscr2
  1414.             lea     buffer+100,a2
  1415. ctw1        move.l  (a2)+,a4
  1416.             move.l  4(a4),a4
  1417. ctw6        cmpa.l  #0,a4
  1418.             beq.s   ctw4
  1419.             move.l  86(a4),a0
  1420.             move.l  16(a0),d1
  1421.             cmp.l   d0,d1
  1422.             bne.s   ctw7
  1423.             move.l  d0,d1
  1424.             move.l  a4,d0
  1425.             bsr     windowoff
  1426.             move.l  d1,d0
  1427.             bra     ctw0
  1428. ctw7        move.l  0(a4),a4
  1429.             bra.s   ctw6
  1430. ctw4        dbf     d5,ctw1
  1431.             movem.l (a7)+,d1-d7/a0-a6
  1432.             rts
  1433.  
  1434. ;display windows and associated fonts
  1435.  
  1436. windowfonts move.b  #1,bool
  1437.             bra     windows1
  1438.  
  1439. ;display loaded font names and definitions
  1440.  
  1441. fonts       lea     fohead(PC),a0
  1442.             bsr     puthead
  1443.             move.l  gfxbase(PC),a1
  1444.             move.l  $8c(a1),a1
  1445. fo1         tst.l   0(a1)
  1446.             beq.s   fo3
  1447.             bsr     fontdata
  1448.             move.l  0(a1),a1
  1449.             bra     fo1
  1450. fo3         rts
  1451.  
  1452. fontdata    move.l  a1,d0
  1453.             bsr     hexa
  1454.             move.w  30(a1),d3
  1455.             bsr     bytedec
  1456.             move.w  20(a1),d3
  1457.             bsr     bytedec
  1458.             move.w  24(a1),d3
  1459.             bsr     bytedec
  1460.             move.l  #romfnt,d0
  1461.             btst    #1,23(a1)
  1462.             beq.s   fod1
  1463.             move.l  #diskfnt,d0
  1464. fod1        bsr     putstr
  1465.             move.b  32(a1),d3
  1466.             bsr     bytedec
  1467.             move.b  33(a1),d3
  1468.             bsr     bytedec
  1469.             move.l  10(a1),d0
  1470.             bra     putnam
  1471.  
  1472. ;set update rate
  1473.  
  1474. settime     bsr     getnum
  1475.             tst.b   d7
  1476.             beq.s   syntax
  1477.             tst.w   d2
  1478.             bne.s   st1
  1479.             move.b  #1,d2
  1480. st1         move.b  d2,timeout
  1481.             rts
  1482. syntax      move.l  #synerr,d0
  1483.             bra     putnam
  1484.  
  1485. ;copy a string from input to 'buffer'
  1486. ;a0 = pointer to string
  1487.  
  1488. getstr      lea     buffer,a5
  1489. gst2        cmp.b   #' ',0(a0)
  1490.             beq.s   gst1
  1491.             cmp.b   #10,0(a0)
  1492.             beq.s   gst1
  1493.             move.b  (a0)+,(a5)+
  1494.             bra.s   gst2
  1495. gst1        clr.b   0(a5)
  1496.             bra     kllblnks
  1497.  
  1498. ;read in a nodename or a processname
  1499.  
  1500. nodenam     bsr     isdec
  1501.             move.b  d2,procnum
  1502. nodenam2    bsr     kllblnks
  1503.             move.l  a0,a5
  1504. gno1        cmp.b   #10,(a0)+
  1505.             bne.s   gno1
  1506.             move.b  #0,-1(a0)
  1507.             rts
  1508.  
  1509. ;modify a task's priority
  1510.  
  1511. taskpri     bsr     getnum
  1512.             tst.b   d7
  1513.             beq     syntax
  1514.             move.b  d2,newpri
  1515.             bsr     nodenam
  1516.             moveq.l #2,d7
  1517.             lea     TRuNode(PC),a4
  1518.             bsr     findnam
  1519.             tst.b   d7
  1520.             beq.s   tp1
  1521.             move.l  d0,a1
  1522.             move.b  newpri,d0
  1523.             CALL    SetTaskPri,_SysBase(PC)
  1524. tp1         rts
  1525.  
  1526. ;set the priority of our task
  1527.  
  1528. mypri       bsr     getnum
  1529.             tst.b   d7
  1530.             beq     syntax
  1531.             move.l  _SysBase(PC),a1
  1532.             move.l  276(a1),a1
  1533.             move.l  d2,d0
  1534.             CALL    SetTaskPri,_SysBase(PC)
  1535.             rts
  1536.  
  1537. ;cancel a task or a process. The theory is quite simple:
  1538. ;(Process->ReturnAddr)-4 points to the return address on
  1539. ;the stack. Task->SPReg points to the next instruction
  1540. ;to be executed. We just need a
  1541. ; *(Task->SPReg) = *(Process->ReturnAddr-4).
  1542. ;If the process has been started from Dos (CLI) and
  1543. ;the process is doing disk I/O, the CLI will respond with
  1544. ;a GURU #87000004 (AsyncPKT=unexpected packed received).
  1545. ;Thats why the calling CLI is also canceled.
  1546.  
  1547.  
  1548. cancel      clr.l   remembr         ;used for CLI stdio
  1549.             clr.l   remembr2
  1550.             clr.b   bool
  1551.             bsr     nodenam
  1552. testagain   moveq.l #1,d7
  1553.             lea     TReNode(PC),a4
  1554.             bsr     findnam
  1555.             move.l  a5,pointer
  1556.             tst.b   d7
  1557.             bne.s   canok
  1558.             move.l  #stperr,d0
  1559.             bra     putnam
  1560. canok       move.l  d0,a1          ;d0=task
  1561.             cmp.b   #1,8(a1)       ;TASK ?
  1562.             bne.s   isproc
  1563.             CALL    RemTask,_SysBase(PC)
  1564.             rts
  1565. isproc      movem.l d0-d7/a0-a6,-(a7)
  1566.             move.l  #-1,d0            ;needed for recursive killing tasks
  1567.             CALL    AllocSignal,_SysBase(PC)
  1568.             clr.l   d1
  1569.             bset    d0,d1
  1570.             move.l  d1,cancelbit
  1571.             move.l  d0,cancelbnum
  1572.             movem.l (a7)+,d0-d7/a0-a6
  1573.  
  1574.             clr.l   d5
  1575.             tst.l   $ac(a1)         ;pr_CLI
  1576.             beq.s   wascreproc
  1577.             move.l  $80(a1),a2      ;Seglist
  1578.             adda.l  a2,a2
  1579.             adda.l  a2,a2
  1580.             move.l  12(a2),d1       ;empty ?
  1581.             bne.s   wascreproc
  1582.             move.l  $ac(a1),a2      ;CommandLineInterface
  1583.             adda.l  a2,a2
  1584.             adda.l  a2,a2
  1585.             move.l  60(a2),d5       ;cli_Module
  1586.             tst.l   40(a2)          ;IsInteractive
  1587.             beq     dosreturn
  1588.             move.l  28(a2),remembr  ;yes,get Cli-Window locks
  1589.             move.l  56(a2),remembr2
  1590.             bra     dosreturn
  1591. wascreproc  tst.b   bool            ;it is not a CLI, ask what to do
  1592.             bne.s   unload
  1593.             move.b  #3,bool
  1594.             move.l  #canerr0,d0     ;ask for Workbench
  1595.             bsr     putstr
  1596.             bsr     readline
  1597.             ori.b   #$20,dummy
  1598.             cmp.b   #'y',dummy
  1599.             beq.s   andagain
  1600.             move.b  #2,bool
  1601.             move.l  #canerr1,d0    ;ask for unload
  1602.             bsr     putstr
  1603.             bsr     readline
  1604.             ori.b   #$20,dummy
  1605.             cmp.b   #'y',dummy
  1606.             bne.s   andagain
  1607.             move.b  #1,bool
  1608. andagain    move.l  pointer(PC),a5
  1609.             bra     testagain      ;test if the task still there
  1610.  
  1611. unload      move.l  128(a1),d4 ;get Segmentlist
  1612.             beq.s   unl3
  1613.             lsl.l   #2,d4
  1614.             move.l  d4,a3
  1615.             move.l  12(a3),d4
  1616. unl3        tst.l   d4
  1617.             bne.s   unl4
  1618.             move.l  #unloaderr,d0 ;no Segments !?
  1619.             bra     putnam
  1620.  
  1621. unl4        cmp.b   #3,bool            ;Workbench Task
  1622.             bne.s   unl2
  1623.             move.l  a1,-(a7)
  1624.             move.l  #40,d0             ;build a copy of the
  1625.             move.l  #$10000,d1         ;Worbench startup-message
  1626.             CALL    AllocMem,_SysBase(PC)
  1627.             move.l  d0,startmess
  1628.             move.l  (a7)+,a1
  1629.             move.l  d0,a0
  1630.             move.b  #5,8(a0)
  1631.             move.w  #20,18(a0)
  1632.             move.l  d4,24(a0)
  1633.             move.l  a1,d0
  1634.             add.l   #92,d0
  1635.             move.l  d0,20(a0)
  1636.             movem.l a0-a1,-(a7)
  1637.             lea     wbname(PC),a1
  1638.             CALL    FindPort,_SysBase(PC)
  1639.             movem.l (a7)+,a0-a1
  1640.             move.l  d0,14(a0)
  1641.  
  1642. unl2        cmp.b   #1,bool
  1643.             bne.s   dosreturn
  1644.             move.l  a1,-(a7)           ;unload process manualy
  1645.             move.l  d4,d1
  1646.             CALL    UnLoadSeg,dosbase(PC)
  1647.             move.l  (a7)+,a1
  1648.  
  1649. dosreturn   move.l  140(a1),savedat ;Processnumber
  1650. dosret1     move.w  #$4000,$dff09a
  1651.             move.l  54(a1),a3
  1652.             move.l  #endtask,0(a3)
  1653.             move.l  #2,106(a1)
  1654.             move.l  mytask(PC),108(a1)
  1655.             cmp.b   #4,15(a1)        ;if waiting
  1656.             bne.s   doswait
  1657.             move.l  a1,d4
  1658.             CALL    Remove,_SysBase(PC)
  1659.             move.l  d4,a1
  1660.             lea     406(a6),a0       ; activate the task
  1661.             CALL    AddHead,_SysBase(PC)
  1662.             move.l  d4,a1
  1663. doswait     move.w  #-$4000,$dff09a
  1664.             tst.b   bool
  1665.             bne.s   endnodos
  1666.             tst.l   d5
  1667.             beq     endcanc
  1668.             move.l  $ac(a1),a2
  1669.             adda.l  a2,a2
  1670.             adda.l  a2,a2
  1671. dwa1        movem.l d0-d7/a0-a6,-(a7)
  1672.             move.l  cancelbit(PC),d0
  1673.             CALL    Wait,_SysBase(PC)
  1674.             movem.l (a7)+,d0-d7/a0-a6
  1675.             clr.l   d5
  1676.             bra     dosret1
  1677.  
  1678. endcanc     move.l  a1,-(a7)
  1679.             move.l  remembr(PC),d1    ;close CLI-Window
  1680.             beq.s   ecan1             ;if any
  1681.             CALL    Close,dosbase(PC)
  1682. ecan1       move.l  remembr2(PC),d1
  1683.             beq.s   ecan2
  1684.             CALL    Close,dosbase(PC)
  1685. ecan2       move.l  (a7)+,a1
  1686.  
  1687.             move.l  savedat(PC),d0   ;remove Task from
  1688.             move.l  dosbase(PC),a2   ;TaskArray
  1689.             move.l  34(a2),a2
  1690.             move.l  0(a2),a2
  1691.             adda.l  a2,a2
  1692.             adda.l  a2,a2
  1693.             lsl.l   #2,d0
  1694.             clr.l   0(a2,d0)
  1695.  
  1696. endnodos    move.l  a1,d0
  1697.             bsr     closetskwin
  1698.             move.l  cancelbnum(PC),d0      ;remove our Signal
  1699.             CALL    FreeSignal,_SysBase(PC)
  1700.             rts
  1701.  
  1702. ;This Code is (hopefully) excuted by the Process we want
  1703. ;to kill
  1704.  
  1705. endtask     CALL    Forbid,_SysBase(PC)
  1706.             CALL    Disable,_SysBase(PC)
  1707.             move.l  _SysBase(PC),a1
  1708.             move.l  276(a1),a1
  1709.             move.l  176(a1),a1          ;Process_ReturnAddr
  1710.             lea     -4(a1),a7           ;reset Process Stackptr
  1711.             tst.b   bool
  1712.             bne.s   et0
  1713.             movea.l mytask(PC),a1
  1714.             move.l  cancelbit(PC),d0    ;signal Xoper it
  1715.             CALL    Signal,_SysBase(PC) ;died
  1716. et0         cmp.b   #3,bool             ;Workbench Process ?
  1717.             bne.s   et1
  1718.             move.l  startmess(PC),a1
  1719.             CALL    ReplyMsg,_SysBase(PC) ;reply startup message
  1720. et1         rts
  1721.  
  1722. ;Stop a task (just queue it on a special list)
  1723.  
  1724. freeze      bsr     nodenam
  1725.             moveq.l #1,d7
  1726.             lea     TReNode(PC),a4
  1727.             bsr     findnam
  1728.             tst.b   d7
  1729.             bne.s   frok
  1730.             move.l  #stperr,d0
  1731.             bra     putstr
  1732. frok        move.w  #$4000,$dff09a
  1733.             move.l  d0,a1
  1734.             CALL    Remove,_SysBase(PC)
  1735.             move.w  #-$4000,$dff09a
  1736.             move.l  d0,a1
  1737.             move.l  d0,a5
  1738.             lea     stplist(PC),a0
  1739.             CALL    AddHead,_SysBase(PC)
  1740.             add.b   #4,15(a5)
  1741.             rts
  1742. ;put the task back on its list
  1743. warm        bsr     nodenam
  1744.             lea     stplist(PC),a0
  1745.             movea.l a5,a1
  1746.             clr.l   d7
  1747.             bsr     fn4
  1748.             tst.b   d7
  1749.             bne.s   waok
  1750.             move.l  #waerr,d0
  1751.             bra     putstr
  1752. waok        move.w  #$4000,$dff09a
  1753.             move.l  d0,a1
  1754.             CALL    Remove,_SysBase(PC)
  1755.             move.l  d0,a1
  1756.             move.l  d0,a5
  1757.             move.l  TReNode,a0
  1758.             cmp.b   #8,15(a1)
  1759.             bne.s   wa1
  1760.             move.l  TWaNode,a0
  1761. wa1         adda.l  _SysBase(PC),a0
  1762.             CALL    AddTail,_SysBase(PC)
  1763.             move.l  d0,a1
  1764.             sub.b   #4,15(a5)
  1765.             move.w  #-$4000,$dff09a
  1766.             rts
  1767. ;show the hunks of a process
  1768. hunks       bsr     nodenam
  1769.             moveq.l #2,d7
  1770.             lea     TRuNode(PC),a4
  1771.             bsr     findnam
  1772.             tst.b   d7
  1773.             bne.s   hu1
  1774.             rts
  1775. hu1         move.l  d0,a4
  1776.             cmp.b   #13,8(a4)
  1777.             beq.s   hu2
  1778.             move.l  #noprocs,d0
  1779.             bra     putnam
  1780. hu2         move.l  128(a4),d0
  1781.             beq.s   noprogload
  1782.             lsl.l   #2,d0
  1783.             move.l  d0,a3
  1784.             move.l  12(a3),d1
  1785.             beq.s   hu3
  1786.             move.l  #segloaded,d0
  1787.             bsr     putnam
  1788.             bra     hu5
  1789. hu3         move.l  172(a4),d1
  1790.             bne.s   hu4
  1791. noprogload  move.l  #notload,d0
  1792.             bra     putnam
  1793. hu4         move.l  #cliprocs,d0
  1794.             bsr     putnam
  1795.             lsl.l   #2,d1
  1796.             move.l  d1,a4
  1797.             move.l  60(a4),d1
  1798.             beq.s   noprogload
  1799.             move.l  #procloaded,d0
  1800.             bsr     putstr
  1801.             move.l  16(a4),d0
  1802.             bsr     putbcpl
  1803.             bsr     newline
  1804. hu5         lea     hunkheader(PC),a0
  1805.             bsr     puthead
  1806. hu6         move.l  d1,d0
  1807.             bsr     hexa
  1808.             lsl.l   #2,d1
  1809.             move.l  d1,a4
  1810.             move.l  d1,d0
  1811.             addq.l  #4,d0
  1812.             bsr     hexa
  1813.             move.l  -4(a4),d0
  1814.             bsr     hexa
  1815.             bsr     newline
  1816.             move.l  0(a4),d1
  1817.             bne.s   hu6
  1818.             rts
  1819. ;change the priority of a node
  1820. pri         bsr     getnum
  1821.             tst.b   d7
  1822.             beq     syntax
  1823.             move.b  d2,newpri
  1824.             bsr     nodenam2
  1825.             moveq.l #5,d7
  1826.             lea     DevNode(PC),a4
  1827.             bsr     findnam
  1828.             tst.b   d7
  1829.             beq.s   pi1
  1830.             move.l  d0,a1
  1831.             move.b  newpri,9(a1)
  1832.             cmp.l   #SemNode,a4
  1833.             ble.s   pi2
  1834.             move.l  #listerr,d0
  1835.             bra     putnam
  1836. pi2         CALL    Forbid,_SysBase(PC)
  1837.             CALL    Remove,_SysBase(PC)
  1838.             move.l  d0,a1
  1839.             move.l  a4,a0
  1840.             move.l  0(a0),d6
  1841.             lea     0(a6,d6),a0
  1842.             CALL    Enqueue,_SysBase(PC)
  1843.             CALL    Permit,_SysBase(PC)
  1844. pi1         rts
  1845. ;set all break signals of a task
  1846. break       move.l  #$f000,d0
  1847.             bra     setthem
  1848.  
  1849. signal      bsr     readhex
  1850.             tst.b   d7
  1851.             beq     syntax
  1852. setthem     move.l  d0,savedat
  1853.             bsr     nodenam
  1854.             moveq.l #2,d7
  1855.             lea     TReNode(PC),a4
  1856.             bsr     findnam
  1857.             tst.b   d7
  1858.             beq.s   pi1
  1859.             move.l  d0,a1
  1860.             move.l  savedat,d0
  1861.             and.l   18(a1),d0
  1862.             CALL    Signal,_SysBase(PC)
  1863.             rts
  1864.  
  1865. ;'flushlibs'
  1866. flush       move.l  #$ffffff,d0
  1867.             clr.l   d1
  1868.             CALL    AllocMem,_SysBase(PC)
  1869.             rts
  1870.  
  1871. ;display library->lib_IDString
  1872. info        bsr     nodenam2
  1873.             moveq.l #2,d7
  1874.             lea     DevNode(PC),a4
  1875.             bsr     findnam
  1876.             tst.b   d7
  1877.             beq.s   pi1
  1878.             move.l  d0,a0
  1879.             move.l  24(a0),d0
  1880.             beq.s   if1
  1881.             move.l  d0,d1
  1882.             andi.l  #$ff000000,d1
  1883.             bne.s   if1
  1884.             bra     putnam
  1885. if1         move.l  #noinfo,d0
  1886.             bsr     putstr
  1887.             move.l  a5,d0
  1888.             bra     putnam
  1889.  
  1890. capture     move.l  _SysBase(PC),a1
  1891.             lea     42(a1),a0
  1892.             moveq   #2,d6
  1893.             lea     coldtxt,a4
  1894. cap0        move.l  a4,d0
  1895.             bsr     putstr
  1896.             move.l  0(a0),d0
  1897.             bne.s   cap1
  1898.             move.l  #unset,d0
  1899.             bsr     putstr
  1900.             bra     cap2
  1901. cap1        bsr     hexa
  1902. cap2        bsr     newline
  1903.             lea     15(a4),a4
  1904.             lea     4(a0),a0
  1905.             dbf     d6,cap0
  1906.  
  1907.             move.l  #kicktxt,d0
  1908.             bsr     putstr
  1909.             move.l  546(a1),a0
  1910.             cmpa.l  #0,a0
  1911.             bne.s   kickm3
  1912.             move.l  #unset,d0
  1913.             bra     putnam
  1914. kickm3      move.l  a0,-(a7)
  1915.             bsr     newline
  1916.             lea     kickhead(PC),a0
  1917.             bsr     puthead
  1918.             move.l  (a7)+,a0
  1919. kickm0      cmpa.l  #0,a0
  1920.             bne.s   kickm1
  1921.             rts
  1922. kickm1      move.w  14(a0),d6
  1923.             subq    #1,d6
  1924.             lea     16(a0),a2
  1925. kickm2      move.l  0(a2),d0
  1926.             bsr     hexa
  1927.             move.l  0(a2),d0
  1928.             move.l  4(a2),d4
  1929.             add.l   d4,d0
  1930.             bsr     hexa
  1931.             move.l  d4,d0
  1932.             clr.b   d3
  1933.             bsr     longdec
  1934.             bsr     newline
  1935.             lea     8(a2),a2
  1936.             dbf     d6,kickm2
  1937.             move.l  0(a0),a0
  1938.             bra     kickm0
  1939.             rts
  1940.  
  1941. clrcold     move.l  _SysBase,a0
  1942.             clr.l   42(a0)
  1943.             bra.s   chksum
  1944. clrcool     move.l  _SysBase,a0
  1945.             clr.l   46(a0)
  1946.             bra.s   chksum
  1947. clrwarm     move.l  _SysBase,a0
  1948.             clr.l   50(a0)
  1949.  
  1950. chksum      lea     34(a0),a1
  1951.             move    #22,d0
  1952. addchk      add     (a1)+,d1
  1953.             dbf     d0,addchk
  1954.             not     d1
  1955.             move.w  d1,82(a0)
  1956.             rts
  1957.  
  1958. ;display ExecBase->LastAlert
  1959. lastalert   movem.l $100,d1-d2
  1960.             tst.l   d1
  1961.             bne.s   al1
  1962.             move.l  _SysBase(PC),a0
  1963.             movem.l 514(a0),d1-d2
  1964.             bra.s   al1
  1965. alert       movem.l $100,d1-d2
  1966.             cmp.l   #'HELP',0
  1967.             beq.s   al1
  1968.             move.l  #noguru,d0
  1969.             bra     putnam
  1970.  
  1971. al1         move.l  #gurutxt,d0
  1972.             bsr     putstr
  1973.             move.l  d1,d0
  1974.             bsr     hex8
  1975.             lea     out,a0
  1976.             move.l  ptr(PC),d0
  1977.             move.b  #'.',-1(a0,d0)
  1978.             move.l  d2,d0
  1979.             bsr     hex8
  1980.             bra     newline
  1981.  
  1982. ;toggle '<MORE>' on/off
  1983. moretst     bchg    #0,morefl
  1984.             rts
  1985. ;toggle CPUSE task list
  1986. usage       bchg    #0,usageflag
  1987.             rts
  1988.  
  1989. ;Open a library
  1990. openlib     bsr     nodenam2
  1991.             move.l  a5,a1
  1992.             clr.l   d0
  1993.             CALL    OpenLibrary,_SysBase(PC)
  1994.             tst.l   d0
  1995.             beq     fn5
  1996. opli1       bsr     clearscr
  1997.             bra     showlibs
  1998.  
  1999. ;close it
  2000. closelib    bsr     nodenam2
  2001.             clr.l   d7
  2002.             lea     LibNode(PC),a4
  2003.             bsr     findnam
  2004.             tst.b   d7
  2005.             beq.s   clo1
  2006.             move.l  d0,a1
  2007.             CALL    CloseLibrary,_SysBase(PC)
  2008.             bra     opli1
  2009.  
  2010. ;toggle task-ports display on/off
  2011. taskports   bchg    #0,tports
  2012. clo1        rts
  2013.  
  2014. ;end Xoper but stay in background
  2015. hold        lea     4(a7),a7
  2016.             bra.s   instback
  2017. quithold    lea     in,a0
  2018.             lea     dummy,a1
  2019. qh1         move.b  (a1)+,d0
  2020.             move.b  d0,(a0)+
  2021.             cmp.b   #10,d0
  2022.             bne.s   qh1
  2023.  
  2024. instback    tst.b   background
  2025. \Rogue\Monster\
  2026. else
  2027.   echo "will not over write Xoper.a1"
  2028. fi
  2029. if [ `wc -c Xoper.a1 | awk '{printf $1}'` -ne 54718 ]
  2030. then
  2031. echo `wc -c Xoper.a1 | awk '{print "Got " $1 ", Expected " 54718}'`
  2032. fi
  2033. echo "Finished archive 2 of 2"
  2034. # if you want to concatenate archives, remove anything after this line
  2035. exit
  2036. -- 
  2037. Bob Page, U of Lowell CS Dept.  page@swan.ulowell.edu  ulowell!page
  2038. Have five nice days.
  2039.